package com.ruoyi.ftrl.io.server.common;




import com.ruoyi.ftrl.io.server.domain.BTypeCollector;

import java.math.BigDecimal;

public class StringUtil {


    /** * 将单个字节码转换成16进制字符串 * @param bt 目标字节 * @return 转换结果 */
    public static BTypeCollector HexToDomain(String text) {
        BTypeCollector bTypeCollector=new BTypeCollector();
        //十六进制转换十进制
        //Integer.parseInt("",16);
        String texttht="eb90eb90eb904801a30000000000000000000000ffffffff026400000000000002000000002b00005245470000000064000000004f0000000000000000000000000000007c061a1004000000000074";

        //帧头
        String head = text.substring(0, 12);
        bTypeCollector.setHeader(head);
        if (!head.equals("eb90eb90eb90")){
         //   throw new ServerException("错误");
            System.out.println("\"帧头::\" = " + "帧头错误");
        }
        //长度 72 144
        String len = text.substring(12, 14);
        Integer length = Integer.parseInt(len, 16);
        bTypeCollector.setLen(length.toString());

        //功能码
        String key = text.substring(14, 16);
        if (key.equals("01")){
            System.out.println(" = " + "功能码正常");
        }else if (key.equals("41")){
            System.out.println(" = " + "错误码0x41");
        } else if (key.equals("18")) {
            System.out.println("\"\" = " + "设置阀通断正常 0x18");
        } else if (key.equals("58")) {
            System.out.println("\"\" = " + "设置阀通断错误,错误码0x58");
        } else if (key.equals("0a")) {
            System.out.println("\"\" = " + "校时正常");
        }
        //设备ID
        String sid =  text.substring(18, 20)+text.substring(16, 18);
        String s = String.valueOf(Integer.parseInt(sid, 16));
        //String s2 = String.valueOf(Integer.parseInt(sid2, 16));
        bTypeCollector.setEid(s);

        //时间 年 月 日 时 分 秒
        String substring = text.substring(20, 22)+text.substring(22,24)+text.substring(24,26)+text.substring(26,28)+text.substring(28,30)+text.substring(30,32);
        bTypeCollector.setTime(substring);

        //通断状态  目前显示全是0
        bTypeCollector.setColectsta(text.substring(32,40));

        //通讯状态  目前显示全F
        bTypeCollector.setTransprotsta(text.substring(40,48));

        //计量点  (子设备id 设计模式不明) 1字节hex
        bTypeCollector.setMeternum(String.valueOf(Integer.parseInt(text.substring(48,50), 16)));

        //表类型  (目前只发现100) 表类型 1字节hex
        bTypeCollector.setType(String.valueOf(Integer.parseInt(text.substring(50,52), 16)));

        //标号 (未知)
        String bcd = text.substring(64, 66)+text.substring(62,64)+text.substring(60,62)+text.substring(58,60)+text.substring(56,58)+text.substring(54,56)+text.substring(52,54);
        byte[] bytes = ByteUtil.bcdStringToBytes(bcd);
        bTypeCollector.setValveid(ByteUtil.bytesToHex(bytes));


        //室内温度
        int anInt = Integer.parseInt(text.substring(68, 70) + text.substring(66, 68), 16);
        BigDecimal bigDecimal=new BigDecimal(anInt);
        BigDecimal divide = bigDecimal.divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN);
        bTypeCollector.setIndoortemp(divide.toString());

        //室内设置温度
        int anInt1 = Integer.parseInt(text.substring(72, 74) + text.substring(70, 72), 16);
        BigDecimal bigDecimal1=new BigDecimal(anInt1);
        BigDecimal divide1 = bigDecimal1.divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN);
        bTypeCollector.setIndoorsettemp(divide1.toString());

        //空

        //最近两小时平均温度

        int anInt2 = Integer.parseInt(text.substring(78, 80) + text.substring(76, 78), 16);
        BigDecimal bigDecimal2=new BigDecimal(anInt2);
        BigDecimal divide2 = bigDecimal2.divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN);
        bTypeCollector.setAgvindoortemp(divide2.toString());

       // bTypeCollector.setAgvindoortemp(String.valueOf(Integer.parseInt(text.substring(76,80), 16)));

        //空 六位
        //bTypeCollector.setnc2(String.valueOf(Integer.parseInt(text.substring(76,80), 16)));

        //进水温度
        int anInt3 = Integer.parseInt(text.substring(88, 90) + text.substring(86, 88), 16);
        BigDecimal bigDecimal3=new BigDecimal(anInt3);
        BigDecimal divide3 = bigDecimal3.divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN);
        bTypeCollector.setIntemp(divide3.toString());

//        bTypeCollector.setIntemp(String.valueOf(Integer.parseInt(text.substring(86,90), 16)));
        //回水温度
        int anInt4 = Integer.parseInt(text.substring(92, 94) + text.substring(90, 92), 16);
        BigDecimal bigDecimal4=new BigDecimal(anInt4);
        BigDecimal divide4= bigDecimal4.divide(new BigDecimal(100),2,BigDecimal.ROUND_DOWN);
        bTypeCollector.setOuttemp(divide4.toString());

      //  bTypeCollector.setOuttemp(String.valueOf(Integer.parseInt(text.substring(90,94), 16)));

        //阀门开合角度
        bTypeCollector.setValveangle(String.valueOf(Integer.parseInt(text.substring(94,96), 16)));

        //累计工作时间 分钟
        String time =  text.substring(102, 104)+text.substring(100, 102)+ text.substring(98, 100)+text.substring(96, 98);
        String a = String.valueOf(Integer.parseInt(time, 16));
        bTypeCollector.setWorktime(a);
        //空3
        //2
        //累计阀门开启时间
        String time1 =  text.substring(112, 114)+text.substring(110, 112)+ text.substring(108, 110)+text.substring(106, 108);
        String a1 = String.valueOf(Integer.parseInt(time1, 16));
        bTypeCollector.setOpentime(a1);
        //bTypeCollector.setOpentime(String.valueOf(Integer.parseInt(text.substring(106,114), 16)));

        //空  22位
        //实时时间 bcd解码
        String bcd1 = text.substring(148, 150)+text.substring(146,148)+text.substring(144,146)+text.substring(142,144)+text.substring(140,142)+text.substring(138,140)+text.substring(136,138);
        byte[] bytes1 = ByteUtil.bcdStringToBytes(bcd1);
        bTypeCollector.setRealtime(ByteUtil.bytesToHex(bytes1));

        //bTypeCollector.setRealtime(text.substring(136,150));
        //ST状态字 6
        bTypeCollector.setStsta(text.substring(150,156));
        //校检和
        bTypeCollector.setCrc(text.substring(156,158));
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
//        String key = text.substring(6, 8);
        //String key = text.substring(6, 8);

        return bTypeCollector;
    }

}
